package guet.imagan.progbuilder;

/**
 * 实现构建器接口的抽象类
 */
public abstract class Builder implements IBuilder {
	protected Compiler compiler;
	protected Interpreter interpreter;

	/**
	 * 用于创建纯编译型语言项目的构建器
	 * @param compiler 编译器对象，不能为null
	 */
	public Builder(Compiler compiler){
		this.compiler = compiler;
	}

	/**
	 * 创建混合型编程语言的项目构建器
	 * @param compiler 编译器对象，不能为null
	 * @param interpreter 解释器对象，不能为null
	 */
	public Builder(Compiler compiler, Interpreter interpreter){
		this.compiler = compiler;
		this.interpreter = interpreter;
	}

	/**
	 * 创建解释型编程语言项目构建器
	 * @param interpreter 解释器对象，不能为null
	 */
	public Builder(Interpreter interpreter){
		this.interpreter=interpreter;
	}

	/**
	 * 根据文件名(包含完整路径），创建可执行文件对象,这对于可执行文件是有效的，对于编译型语言项目，这个方法必须实现
	 * ，混合型与解释型语言的项目，此方位不支持。
	 * 为此，可以在继承该类，实现具体类时，可以根据不同操作系统，不同的类型的项目，实现这一方法。
	 * @param fileName 文件名字符串
	 * @return ExecuteFile对象
	 */
	public abstract ExecuteFile getExecuteFile(String fileName);
}
